-- local skynet = require "skynet"
-- require "skynet.manager"    

-- local realsvr = ...

-- skynet.start( function() --注册消息处理函数
--     skynet.dispatch("lua", function (session, source, ...) --接收到消息msg，sz
--         -- 收到消息自动unpack(框架行为)，所以处理消息的效率很低
--         skynet.ret(skynet.rawcall(realsvr, "lua", skynet.pack(...))) --根据参数列表重新打包消息转发
--     end)--释放消息msg,sz
--     skynet.register(".proxy")
-- end)


local skynet = require "skynet"
require "skynet.manager"    -- inject skynet.forward_type

skynet.register_protocol {         --注册system消息
    name = "system",
    id = skynet.PTYPE_SYSTEM,
    unpack = function (...) return ... end, --unpack直接返回不解包了
}

local forward_map = {
    --发送到代理服务的lua消息全部转成system消息,不改变原先LUA的消息协议处理方式
    [skynet.PTYPE_LUA] = skynet.PTYPE_SYSTEM,
    --如果接收到应答消息，默认情况下会释放掉消息msg,sz，forward的方式处理消息不会释放掉消息msg,sz
    [skynet.PTYPE_RESPONSE] = skynet.PTYPE_RESPONSE,    
}

local realsvr = ...
skynet.forward_type( forward_map ,function() --注册消息处理函数
    skynet.dispatch("system", function (session, source, msg, sz) 
        --直接转发给realsvr，接收到realsvr响应后也不释放内存，直接转发
        skynet.ret(skynet.rawcall(realsvr, "lua", msg, sz)) 
    end)--处理完不释放内存msg
    skynet.register(".proxy")
end)